#include<iostream>
#include<signal.h>
#include<unistd.h>

using namespace std;

void handler(int signo)
{
    cout<<"get a signo:"<<signo<<endl;

}

//打印当前进程的pending位图表
void Print(sigset_t &set)
{
    sigpending(&set);
    for(int i=31;i>=1;i--)
    {
        if(sigismember(&set,i))
        {
            cout<<1;
        }
        else
        {
            cout<<0;
        }
    }

    cout<<"\n\n";
}

int main()
{
    sigset_t bset,oset;
    sigemptyset(&bset);
    sigemptyset(&oset);
    sigaddset(&bset,2);

    //阻塞bset包含的信号
    sigprocmask(SIG_SETMASK,&bset,&oset);

    sigset_t set;
    while(true)
    {
        Print(set);

        sleep(1);
    }
    
    return 0;
}



// int main()
// {
//     signal(14,handler);
//     int cnt=1;
//     int n=alarm(20);

//     sleep(5);
//     n=alarm(5); //n=15;


//     sleep(100);
//     cout<<n<<endl;

//     return 0;
// }



///////////////////////软件层面产生信号 ，管道：写端正常 ，读端关闭 ，写端会被os发生信号
// int main()
// {

//     int pipefd[2]={0};
//     int n=pipe(pipefd);
//     if(n<0)
//     {
//         perror("pipe");
//         exit(1);
//     }

//     pid_t id=fork();
//     if(id==0)
//     {   
//         close(pipefd[1]);
//         int cnt=5;
//         char buf[1024]={0};
//         // while(cnt)
//         // {
//         //     read(pipefd[0],buf,sizeof(buf));
//         //     cnt--;

//         //     sleep(1);
//         // }
//         sleep(5);
//         close(pipefd[0]);

//         exit(0);
//     }
//     else if(id>0)
//     {
//         close(pipefd[0]);
//         char ch='c';
//         while(true)
//         {
//             write(pipefd[1],&ch,1);

//             sleep(1);
//         }
       
//     }

// }



////////////////硬件层面产生信号
// int main()
// {
//     signal(8,handler);

//     int a=10,b=0;
//     a/=b;

//     return 0;
// }